<template>
	<view>
		<!-- 全局悬浮提醒组件 -->
		<floating-reminder v-if="showReminderWindow" @close="closeReminderWindow"></floating-reminder>
		<view class="container">
			<slot></slot>
		</view>
	</view>
</template>

<script>
	import { isLoggedIn } from './common/utils/auth.js'
	import dataSyncService from './common/services/dataSync.js'
	import { syncStorageToStore } from './common/utils/store-helper.js'
	import config from './common/config.js'
	import pinia from './store/piniaIndex.js'
	import FloatingReminder from './components/floating-reminder.vue'
	
	// 确保Pinia在全局可用
	const createGlobalPinia = () => {
		if (typeof getApp !== 'undefined') {
			const app = getApp()
			if (app) {
				// 初始化全局数据
				if (!app.globalData) {
					app.globalData = {}
				}
				
				// 添加配置和pinia到全局
				app.globalData.config = config
				
				// 添加pinia实例到全局对象
				if (!app.$pinia) {
					app.$pinia = pinia
				}
				
				app.globalData.pinia = pinia
				console.log('全局Pinia已初始化')
			}
		}
	}
	
	// 立即创建全局Pinia实例
	createGlobalPinia()
	
	// 如果是Vue 3环境，尝试初始化Pinia
	// #ifdef VUE3
	try {
		// 尝试创建一个早期的Pinia实例
		const { createApp } = uni.requireNativePlugin('app-lifecycle')
		const earlyApp = createApp({})
		if (earlyApp && earlyApp.use) {
			earlyApp.use(pinia)
			console.log('早期Pinia初始化成功')
		}
	} catch (e) {
		console.error('早期Pinia初始化失败:', e)
	}
	// #endif
	
	export default {
		components: {
			FloatingReminder
		},
		data() {
			return {
				showReminderWindow: true,
				reminderTimer: null
			}
		},
		onLaunch: function() {
			console.log('应用启动')
			
			// 确保全局配置已初始化
			if (!getApp().globalData) {
				getApp().globalData = {}
			}
			
			// 添加配置
			getApp().globalData.config = config
			
			// 确保Pinia在全局可用
			if (!getApp().$pinia) {
				getApp().$pinia = pinia
			}
			getApp().globalData.pinia = pinia
			
			// 尝试提前同步本地存储到Pinia
			try {
				syncStorageToStore()
				console.log('应用启动时已同步本地存储到Pinia')
			} catch (error) {
				console.error('应用启动时同步本地存储到Pinia失败', error)
			}
			
			console.log('全局配置加载完成:', config)
			
			// 打印API基础URL，方便调试
			console.log('API基础URL:', config.apiBaseUrl)
			
			// 初始化一些全局配置或数据
			this.initApp()
			
			// 添加全局页面拦截器
			this.setupPageInterceptor()
			
			// 初始化提醒功能
			this.initReminder()
		},
		onShow: function() {
			console.log('应用显示')
			
			// 再次尝试同步数据
			setTimeout(() => {
				try {
					syncStorageToStore()
					console.log('应用显示时已同步本地存储到Pinia')
				} catch (error) {
					console.error('应用显示时同步数据失败:', error)
				}
			}, 500)
			
			// 检查是否需要显示提醒窗口
			this.checkReminderSettings()
		},
		onHide: function() {
			console.log('应用隐藏')
		},
		// #ifdef VUE3
		mounted() {
			console.log('App mounted, Pinia should be ready now')
			// 确保在应用完全挂载后，Pinia已经初始化完成再调用数据同步
			setTimeout(() => {
				try {
					// 先将本地存储数据同步到pinia store
					syncStorageToStore()
					
					// 然后检查数据一致性
					dataSyncService.checkDataConsistency()
					console.log('App挂载后已完成数据同步')
				} catch (error) {
					console.error('数据同步失败:', error)
				}
			}, 1000) // 缩短延迟时间以提高响应速度
		},
		// #endif
		methods: {
			initApp() {
				// 检查更新
				if (uni.canIUse('getUpdateManager')) {
					const updateManager = uni.getUpdateManager()
					updateManager.onCheckForUpdate(function(res) {
						if (res.hasUpdate) {
							updateManager.onUpdateReady(function() {
								uni.showModal({
									title: '更新提示',
									content: '新版本已经准备好，是否重启应用？',
									success: function(res) {
										if (res.confirm) {
											updateManager.applyUpdate()
										}
									}
								})
							})
							
							updateManager.onUpdateFailed(function() {
								uni.showModal({
									title: '提示',
									content: '检查更新失败，请稍后再试',
									showCancel: false
								})
							})
						}
					})
				}
			},
			
			// 设置全局页面拦截器
			setupPageInterceptor() {
				// 获取所有页面路径
				const pages = getCurrentPages()
				
				// 定义需要登录的页面（除了登录页和隐私政策页）
				const whiteList = ['/pages/login/index', '/pages/privacy/index']
				
				// 监听页面跳转
				uni.addInterceptor('navigateTo', {
					invoke(params) {
						const url = params.url
						
						// 检查是否需要登录
						if (!whiteList.some(path => url.startsWith(path))) {
							// 需要登录但未登录
							if (!isLoggedIn()) {
								// 未登录，跳转到登录页
								uni.showToast({
									title: '请先登录',
									icon: 'none'
								})
								
								// 延迟跳转到登录页
								setTimeout(() => {
									uni.navigateTo({
										url: '/pages/login/index'
									})
								}, 1500)
								
								// 阻止原来的跳转
								return false
							}
						}
						
						// 允许跳转
						return params
					}
				})
				
				// 同样拦截switchTab
				uni.addInterceptor('switchTab', {
					invoke(params) {
						const url = params.url
						
						// 检查是否需要登录
						if (!whiteList.some(path => url.startsWith(path))) {
							// 需要登录但未登录
							if (!isLoggedIn()) {
								// 未登录，跳转到登录页
								uni.showToast({
									title: '请先登录',
									icon: 'none'
								})
								
								// 延迟跳转到登录页
								setTimeout(() => {
									uni.navigateTo({
										url: '/pages/login/index'
									})
								}, 1500)
								
								// 阻止原来的跳转
								return false
							}
						}
						
						// 允许跳转
						return params
					}
				})
			},
			
			// 初始化提醒功能
			initReminder() {
				// 检查是否开启提醒
				this.checkReminderSettings()
				
				// 定时检查最新提醒状态（每分钟检查一次）
				this.reminderTimer = setInterval(() => {
					this.checkReminderSettings()
				}, 60000)
			},
			
			// 检查提醒设置
			checkReminderSettings() {
				// 从本地存储获取提醒设置
				const reminderEnabled = uni.getStorageSync('reminder_enabled')
				// 如果从未设置过或设置为true，默认为true
				if (reminderEnabled === '' || reminderEnabled) {
					this.showReminderWindow = true
				} else {
					this.showReminderWindow = false
				}
			},
			
			// 关闭提醒窗口
			closeReminderWindow() {
				this.showReminderWindow = false
			}
		},
		beforeDestroy() {
			// 清除定时器
			if (this.reminderTimer) {
				clearInterval(this.reminderTimer)
				this.reminderTimer = null
			}
		}
	}
</script>

<style>
	/* TDesign样式通过组件自动加载，无需在此处引入 */
	
	/* 引入iconfont字体图标 */
	@import "static/css/iconfont.css";
	
	/*每个页面公共css */
	page {
		font-size: 28rpx;
		color: #333;
		background-color: #f5f5f5;
		font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Helvetica, Segoe UI, Arial, Roboto, 'PingFang SC', 'miui', 'Hiragino Sans GB', 'Microsoft Yahei', sans-serif;
		padding-bottom: 120rpx;
	}
	
	/* 主题色 */
	.primary-color {
		color: #8cc9a1;
	}
	
	.primary-bg {
		background-color: #8cc9a1;
	}
	
	/* 通用布局 */
	.flex-row {
		display: flex;
		flex-direction: row;
	}
	
	.flex-column {
		display: flex;
		flex-direction: column;
	}
	
	.flex-center {
		display: flex;
		justify-content: center;
		align-items: center;
	}
	
	.flex-between {
		display: flex;
		justify-content: space-between;
		align-items: center;
	}
	
	.flex-around {
		display: flex;
		justify-content: space-around;
		align-items: center;
	}
	
	.flex-wrap {
		flex-wrap: wrap;
	}
	
	.flex-1 {
		flex: 1;
	}
	
	/* 文本样式 */
	.text-bold {
		font-weight: bold;
	}
	
	.text-center {
		text-align: center;
	}
	
	.text-right {
		text-align: right;
	}
	
	.text-ellipsis {
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
	}
	
	/* 边距 */
	.m-10 {
		margin: 10rpx;
	}
	
	.m-20 {
		margin: 20rpx;
	}
	
	.m-30 {
		margin: 30rpx;
	}
	
	.mt-10 {
		margin-top: 10rpx;
	}
	
	.mt-20 {
		margin-top: 20rpx;
	}
	
	.mt-30 {
		margin-top: 30rpx;
	}
	
	.mb-10 {
		margin-bottom: 10rpx;
	}
	
	.mb-20 {
		margin-bottom: 20rpx;
	}
	
	.mb-30 {
		margin-bottom: 30rpx;
	}
	
	.ml-10 {
		margin-left: 10rpx;
	}
	
	.ml-20 {
		margin-left: 20rpx;
	}
	
	.ml-30 {
		margin-left: 30rpx;
	}
	
	.mr-10 {
		margin-right: 10rpx;
	}
	
	.mr-20 {
		margin-right: 20rpx;
	}
	
	.mr-30 {
		margin-right: 30rpx;
	}
	
	.p-10 {
		padding: 10rpx;
	}
	
	.p-20 {
		padding: 20rpx;
	}
	
	.p-30 {
		padding: 30rpx;
	}
	
	.pt-10 {
		padding-top: 10rpx;
	}
	
	.pt-20 {
		padding-top: 20rpx;
	}
	
	.pt-30 {
		padding-top: 30rpx;
	}
	
	.pb-10 {
		padding-bottom: 10rpx;
	}
	
	.pb-20 {
		padding-bottom: 20rpx;
	}
	
	.pb-30 {
		padding-bottom: 30rpx;
	}
	
	.pl-10 {
		padding-left: 10rpx;
	}
	
	.pl-20 {
		padding-left: 20rpx;
	}
	
	.pl-30 {
		padding-left: 30rpx;
	}
	
	.pr-10 {
		padding-right: 10rpx;
	}
	
	.pr-20 {
		padding-right: 20rpx;
	}
	
	.pr-30 {
		padding-right: 30rpx;
	}
	
	/* 按钮样式 */
	.btn-primary {
		background-color: #8cc9a1;
		color: #fff;
		border: none;
	}
	
	.btn-outline {
		background-color: transparent;
		color: #8cc9a1;
		border: 1px solid #8cc9a1;
	}
	
	.btn-block {
		width: 100%;
		display: block;
	}
	
	.btn-round {
		border-radius: 50rpx;
	}
</style>

